<template>
  <div>
    
  </div>
</template>
<script setup lang="ts">
  // function Car(name:string,age:number){
  //   this.name=name;
  //   this.age=age;
  //   this.run=function(){
  //   }
  // }
  // ts 的class 类型 新增了三个修饰符
  // ts 新增了三个修饰符
  // public 公共的 任何地方都可以访问 （当前类的内部,实例对象，子类的内部可以访问）
  // private 私有的 只有当前类的内部可以访问 
  // protected 受保护的 只有当前类和子类的内部可以访问
  class Car{
    // ts的 属性 可以放置最上端
   private color:string;//私有属性
   public name:string; //公共属性
   protected age:number
    
     constructor(name:string,age:number){
         this.name=name;
         this.age=age;
         this.color='red'
     }
     public run(km:string):void{ //公共的方法
        console.log("调用了run方法")
        this.jia()//调用了受保护的方法
     }
    private stop():number{ // 私有的方法 类内部可以访问
        console.log('停车')
      return 123
      
     }
     fly(){ //飞行的方法
       console.log(this.color) //访问私有属性
        this.stop(); //private 私有的方法 类内部可以访问
     }
     protected jia(){//protected
        console.log('受保护的方法被调用了')
     }
     static test():void{//静态方法 不需要实例化就可以调用
      console.log('静态方法')
     }
  }

      Car.test()//构造名 直接调用静态方法
    let bmw=new Car("宝马",4)
      bmw.run("445")// 
      // bmw.stop()// 报错 stop标记private 私有的方法 类内部可以访问
      bmw.fly()//调用fly方法
      // bmw.jia()//报错 protected受保护的 只有当前类和子类可以访问

     class Bmw extends Car{
        public version:string

          constructor(version:string){
               super("宝马",3) //super完成继承 并给父类传参
              this.version=version;
          }
          make(){
            console.log("制造")
            this.jia()//子类访问 父类的 受保护的方法 protected
          }
     } 
     let bmw740=new Bmw("740");
     bmw740.make();
</script>